package com.swa99ylum.pxf.cell.injector;

import java.util.Calendar;
import java.util.Date;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 自适应 注射器：可以根据 cellValue 的 类型，自适应 的 注射
 *
 */
public class AdaptableCellInjector extends CellInjector {
	
	private static XSSFCellStyle dateStyle = null; 
	
	@Override
	public void doInject(XSSFCell cell, Object cellValue) {
		
		
		if(cellValue instanceof Boolean) {
			//由于 通过了 "instanceof" 的 验证，所以 强转必然不会报错
			cell.setCellValue( (Boolean) cellValue );
			
		}else if(cellValue instanceof Calendar) {
			cell.setCellValue( (Calendar) cellValue );
			
		}else if(cellValue instanceof Date) {
//			DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//			String value = df.format(cellValue);
//			cell.setCellValue( value ); //如果直接 set Date类型，则 单元格 类型为 "常规"：43165.0276375579

			cell.setCellValue( (Date) cellValue );
//			cell.setCellValue( new Date() );
			
			
//			XSSFWorkbook wb = cell.getRow().getSheet().getWorkbook();
//			XSSFCellStyle cellStyle = wb.createCellStyle();
//			XSSFDataFormat format = wb.createDataFormat();
//			cellStyle.setDataFormat(format.getFormat("m/d/yy h:mm"));
//			cell.setCellStyle(cellStyle);
//			 System.out.println("asdasd");
			
			
			if(dateStyle == null) {
				XSSFWorkbook wb = cell.getRow().getSheet().getWorkbook();
				
				 
//				 XSSFCellStyle cellStyle0 = wb.getCellStyleAt(0);
				XSSFCellStyle cellStyle = wb.createCellStyle();
				 
				 
				    cellStyle.setDataFormat((short)14); //日期类型
//				    cellStyle.setDataFormat(0x31); //纯文本
				    
				    dateStyle = cellStyle;
			}
			 
			 
			    
			 cell.setCellStyle(dateStyle);
//			 System.out.println("asda111sd");
			 
			 
//			 CellStyle cellStyle = wb.createCellStyle();
//			 CreationHelper createHelper = wb.getCreationHelper();
//			 cellStyle.setDataFormat(
//			     createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
//			 cell.setCellStyle(cellStyle);
			 
			 
//			DataFormatter..formatCellValue
//			cell.setCellType(CellType.NUMERIC);
//			Date date = (Date) cellValue;
//			Calendar calendar = Calendar.getInstance();
//			calendar.setTime(date);
//			
//			cell.setCellValue( calendar.getInstance() );//如果直接 set Calendar类型，则 单元格 类型为 "日期类型"：
			
		}else if(cellValue instanceof Integer) {
			//int 转 double
			int i = (int) cellValue;
			double d = (double) i; // 或者 也可以用：double d = new Double(i);
			
			cell.setCellValue( d );
			
		}else if(cellValue instanceof Double) {
			cell.setCellValue( (Double) cellValue );
			
		}else if(cellValue instanceof String) {
			cell.setCellValue( (String) cellValue );
			
		}else {
			//当 cellValue 为 null 时，在 单元格中 写入 字符串 "null"
			cell.setCellValue( String.valueOf(cellValue));
			
		}
		
	}
	
	
//	@Override
//	public Object doExtract(XSSFCell cell) throws ExtractorException {
//		
//		if(cell == null) return null;
//		
//		try {
//			switch (cell.getCellTypeEnum()) {
//				case STRING:
//					return cell.getStringCellValue();
//					
//				case NUMERIC:
//					/* 日期类型 的 单元格 也满足 CellType==NUMERIC
//					 * 官方文档：Numeric cell type (whole numbers, fractional numbers, dates)
//					 * 
//					 * 但是我们这里 仍旧用 getNumericCellValue() 来 提取，而不是  getDateCellValue()
//					 */
//					return cell.getNumericCellValue();
//					
//				case BOOLEAN:
//					return cell.getBooleanCellValue();
//					
//				case FORMULA: // 公式
//					return cell.getCellFormula();
//					
//				case ERROR:
//					/* return cell.getErrorCellValue(); */
//					return cell.getErrorCellString();
//					
//				case BLANK: // 空值
//					return "";
//					
//				default:
//					return cell.getStringCellValue();
//			}
//		} catch (IllegalStateException e) {
//			throw new ExtractorException(cell, "按 自适应 类型");
//		}
//
//	}


}
